#ifndef _ARCHIVOS_FACTORY_
#define _ARCHIVOS_FACTORY_

/********************************************************************
 * ArchivosFactory.h 
 * 
 * Descripcion:
 * 		Esta clase permite crear objetos ArchivoDatos del tipo pasado por
 * 		parametro
 ******************************************************************/ 

#include "arch_datos.h"
#include "secuencial.h"
#include "hash.h"
#include "indexado.h"
#include "secuencial_indexado.h"
#include "excep_arch_inexistente.h"
#include "header.h"
#include "indicesFactory.h"

class ArchivosFactory{
	
	
	public:
		
		ArchivosFactory();
	
		virtual ~ArchivosFactory();
	
		/*
		 * Crea un objeto archivo del tipo pasado por parametro
		 * y lo devuelve. 
		 */
		ArchivoDatos* crear_archivo(	std::string &tipo, 
								std::string& nombre,			
								unsigned int tam_bloque, 
		                        unsigned int tam_paquete);
		                        
		ArchivoDatos * crear_archivo(TiposArchivo tipo,
								std::string& nombre,			
								unsigned int tam_bloque, 
		                        unsigned int tam_paquete);
		                        
		TiposArchivo to_enum(std::string tipo);
		
		/*
		 * Crea un objeto del tipo archivo correspondiente, recuperando
		 * el formato del archivo cuyo nombre es el pasado por parametro
		 */
		ArchivoDatos* hidratar(std::string nombre) throw(ExcepArchInexistente);
		
	private:
			
		ArchivosFactory(ArchivosFactory &f);
		
};

#endif
